﻿/*

	File: CInput.h

	Leírás: IInput interface megvalósítása directInput segítségével, egér és billentyűzet input érzékelése.

	Szerzõ: SevN

*/
#ifndef __CINPUT_H__
#define __CINPUT_H__
#define DIRECTINPUT_VERSION 0x0800
#include <d3dx9.h>
#include <dinput.h>

#include "..\Includes\IInput.h"
#include "..\Util\Common.h"

namespace Engine
{
class CInput : public IInput
{
public:

	// le van-e nyomva vmeik bill
	virtual bool isKeyDown(int key); 

	// fel van-e engedve vmeik bill
	virtual bool isKeyUp(int key); 

	// megnyomták-e vmeik billt
	virtual bool isKeyPressed(int key); 

	// le van-e nyomva vmeik egérgomb
	virtual bool isMouseDown(int button); 

	// egér vízszintes irányú elmozdulása
	virtual LONG getMouseStateX();

	// egér függőleges irányú elmozdulása
	virtual LONG getMouseStateY();

	// egér görgő elmozdulása
	virtual LONG getMouseStateZ();

  // inicializálás
	void init(HINSTANCE hInstance, HWND hWnd);

  // input érzékelése
  void detectInput();

  // felszabadítás
	void clean(void);

//	void onResetDevice(LPDIRECT3DDEVICE9 d3ddev);//reset utani ujrafoglalas
	
	static CInput* getInstance();

  // egyke megsemmisítése
  static void destroy();

private:
  ~CInput();
  CInput();
  static CInput* pInstance;

  // pointer a DirectInput interface-re
	LPDIRECTINPUT8 din;    

  // pointer a billentyûzet eszközre
	LPDIRECTINPUTDEVICE8 dinkeyboard;

  // pointer az egér eszközre
	LPDIRECTINPUTDEVICE8 dinmouse;

  // az egér állapotának eltárolására definiált struktúra
	DIMOUSESTATE mousestate;

  // a billentyû információ eltárolására létrehozott tömb
	BYTE keystate[256];

  // segédtömb a keyPressednek
	BYTE prevKeystate[256];

  // forditva mukodjon-e az egér y tengelye
  bool inverted;

};

IInput* getInput();
}
#endif 